home *** CD-ROM | disk | FTP | other *** search
/ InterCD 2001 May / may_2001.iso / intercd / root / Multimedia / ^DivX_Article / virtualdub / VirtualDub-source-1_4d / f_reduce2.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-03-20  |  1.6 KB  |  51 lines

  1. //    VirtualDub - Video processing and capture application
  2. //    Copyright (C) 1998-2001 Avery Lee
  3. //
  4. //    This program is free software; you can redistribute it and/or modify
  5. //    it under the terms of the GNU General Public License as published by
  6. //    the Free Software Foundation; either version 2 of the License, or
  7. //    (at your option) any later version.
  8. //
  9. //    This program is distributed in the hope that it will be useful,
  10. //    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. //    GNU General Public License for more details.
  13. //
  14. //    You should have received a copy of the GNU General Public License
  15. //    along with this program; if not, write to the Free Software
  16. //    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  
  18. #include "filter.h"
  19.  
  20. extern "C" void asm_reduceby2_32(
  21.         void *dst,
  22.         void *src,
  23.         unsigned long width,
  24.         unsigned long height,
  25.         unsigned long srcstride,
  26.         unsigned long dststride);
  27.  
  28. static int reduce_run(const FilterActivation *fa, const FilterFunctions *ff) {
  29.     asm_reduceby2_32(fa->dst.data, fa->src.data, fa->dst.w, fa->dst.h, fa->src.pitch, fa->dst.pitch);
  30.     
  31.     return 0;
  32. }
  33.  
  34. static long reduce_param(FilterActivation *fa, const FilterFunctions *ff) {
  35.     fa->dst.w /= 2;
  36.     fa->dst.h /= 2;
  37.     fa->dst.pitch = fa->dst.w*4;
  38.  
  39.     return FILTERPARAM_SWAP_BUFFERS;
  40. }
  41.  
  42. FilterDefinition filterDef_reduceby2={
  43.     0,0,NULL,
  44.     "2:1 reduction",
  45.     "Reduces the size of an image by 2:1 in both directions. A 2x2 non-overlapping matrix is used.\n\n[Assembly optimized] [MMX optimized]",
  46.     NULL,NULL,
  47.     0,
  48.     NULL,NULL,
  49.     reduce_run,
  50.     reduce_param,
  51. };